1. 对于移动成本低总是被拷贝的可拷贝形参,考虑按值传递
- 总结:
- 对于可拷贝,移动开销低,而且无条件被拷贝的形参,按值传递效率基本与按引用传递效率一致,而且易于实现,还生成更少的目标代码。
- 通过构造拷贝形参可能比通过赋值拷贝形参开销大的多。
- 按值传递会引起切片问题,所说不适合基类形参类型。
2. 考虑使用置入代替插入
- 注意使用插入和置入的区别,前者需要传递完整的对象,后者之需要传递构造函数的参数即可,并且不会创建临时对象(
push_back
和emplace_back
) - 总结:
- 原则上,置入函数有时会比插入函数高效,并且不会更差。
- 实际上,当以下条件满足时,置入函数更快:(1)值被构造到容器中,而不是直接赋值;(2)传入的类型与容器的元素类型不一致;(3)容器不拒绝已经存在的重复值。
- 置入函数可能执行插入函数拒绝的类型转换。